gl renderer: Properly retrieve matrix scale
authorTimm Bäder <mail@baedert.org>
Sun, 12 Aug 2018 15:42:58 +0000 (17:42 +0200)
committerTimm Bäder <mail@baedert.org>
Thu, 8 Nov 2018 04:13:50 +0000 (05:13 +0100)
So rotating offscreen nodes works.

gsk/gl/gskglrenderops.c

index eba7c8fb47bde339870cf1ab11559b30a9e16f12..f89022b133ec590cd948da4664c6f07abe72e663 100644 (file)
@@ -14,9 +14,23 @@ float
 ops_get_scale (const RenderOpBuilder *builder)
 {
   const graphene_matrix_t *mv = &builder->current_modelview;
+  graphene_vec3_t col1;
+  graphene_vec3_t col2;
 
-  return MAX (graphene_matrix_get_x_scale (mv),
-              graphene_matrix_get_y_scale (mv));
+  /* TODO: We should probably split this up into two values... */
+
+  graphene_vec3_init (&col1,
+                      graphene_matrix_get_value (mv, 0, 0),
+                      graphene_matrix_get_value (mv, 1, 0),
+                      graphene_matrix_get_value (mv, 2, 0));
+
+  graphene_vec3_init (&col2,
+                      graphene_matrix_get_value (mv, 0, 1),
+                      graphene_matrix_get_value (mv, 1, 1),
+                      graphene_matrix_get_value (mv, 2, 1));
+
+  return MAX (graphene_vec3_length (&col1),
+              graphene_vec3_length (&col2));
 }
 
 static inline gboolean